import Redis from 'ioredis';

// 创建一个 Redis 客户端
const redis = new Redis({
  host: 'localhost',
  port: 6379,
  connectTimeout: 3000,
  db:1,
});

async function run() {
  for (let i = 0; i < 5000; i++) {
    await runOnce()
  }

  // 关闭连接
  redis.disconnect();
}

async function runOnce() {
  const myKey = 'myCounter';

  while (true) {
    // 监视键
    await redis.watch(myKey);
    // 获取当前值（如果需要进行某些逻辑判断）
    const currentValue = Number(await redis.get(myKey));

    // 开始事务
    const transaction = redis.multi();
    try {
      // 添加事务命令
      transaction.set(myKey, `${currentValue + 1}`);

      // 执行事务
      const results = await transaction.exec(); // exec() 执行所有命令

      if (results !== null) {
        break
      }
    } catch (error) {
      console.error('Transaction failed:', error);
    } finally {
      // 取消监视
      await redis.unwatch();
    }
  }
}

// 运行主函数
run();
